<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>javascript 阶段</title>
</head>

<body>


    <script>
        // call
        var _self;// 定义变量,用于记录say作用域的this
        // x 对象
        var x = {
            color: "red",
            say: function (width, height) {// 作用域
                console.log("颜色:" + this.color + "宽度:" + width + "高度:" + height);
                _self = this;// 记录当前函数作用域的this
            }
        }
        // x.say();
        // console.log(_self === x);// true

        // y 对象
        var y = {
            color: "green"
        }

        // 改变this之前
        // y.say();// 报错
        // console.log(y.color);// undefined

        // 改变this之后
        x.say.call(y, "100px", "120px");
        console.log(_self === y);// true

        // call
        // 调用者: 方法/函数
        // 参数: 参数1 目标对象  , 参数2,  参数3
        // 返回值: undefined (直接忽略)
        // 功能: 改变原对象方法作用域中this指向(用y对象替换了x对象)

    </script>
</body>

</html>